home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!elroy.jpl.nasa.gov!decwrl!sun-barr!newstop!male!jethro!exodus!mipsdal.mips.com
- From: riley@mipsdal.mips.com (Riley Rainey)
- Newsgroups: comp.sources.x
- Subject: v12i009: acm - X aerial combat simulation, Part04/09
- Message-ID: <8986@exodus.Eng.Sun.COM>
- Date: 2 Mar 91 08:32:28 GMT
- References: <csx-12i006:acm@uunet.UU.NET>
- Sender: news@exodus.Eng.Sun.COM
- Lines: 1742
- Approved: argv@sun.com
-
- Submitted-by: riley@mipsdal.mips.com (Riley Rainey)
- Posting-number: Volume 12, Issue 9
- Archive-name: acm/part04
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 4 (of 9)."
- # Contents: acm/V/test/Makefile acm/V/test/animate.c
- # acm/fsim/doRadar.c acm/fsim/newPlane.c acm/fsim/rwy
- # Wrapped by riley@mipsdal on Thu Feb 14 10:09:18 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'acm/V/test/Makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'acm/V/test/Makefile'\"
- else
- echo shar: Extracting \"'acm/V/test/Makefile'\" \(7148 characters\)
- sed "s/^X//" >'acm/V/test/Makefile' <<'END_OF_FILE'
- X# Makefile generated by imake - do not edit!
- X# $XConsortium: imake.c,v 1.37 88/10/08 20:08:30 jim Exp $
- X
- X###########################################################################
- X# X Window System Makefile generated from template file Imake.tmpl
- X# $XConsortium: Imake.tmpl,v 1.91 88/10/23 22:37:10 jim Exp $
- X#
- X# Do not change the body of the imake template file. Server-specific
- X# parameters may be set in the appropriate .macros file; site-specific
- X# parameters (but shared by all servers) may be set in site.def. If you
- X# make any changes, you'll need to rebuild the makefiles using
- X# "make World" (at best) or "make Makefile; make Makefiles" (at least) in
- X# the top level directory.
- X#
- X# If your C preprocessor doesn't define any unique symbols, you'll need
- X# to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
- X# "make Makefile", "make Makefiles", or "make World").
- X#
- X# If you absolutely can't get imake to work, you'll need to set the
- X# variables at the top of each Makefile as well as the dependencies at the
- X# bottom (makedepend will do this automatically).
- X#
- X
- X# WARNING: Imake.tmpl not configured; guessing at definitions!!!
- X# This might mean that BOOTSTRAPCFLAGS wasn't set when building imake.
- X
- X###########################################################################
- X# platform-specific configuration parameters - edit Guess.macros to change
- X
- X# platform: $XConsortium: Guess.macros,v 1.30 88/10/23 11:00:33 jim Exp $
- X
- X AR = ar clq
- X BOOTSTRAPCFLAGS =
- X CC = cc
- X COMPRESS = compress
- X CPP = /lib/cpp
- X INSTALL = install
- X LD = ld
- X LINT = lint
- X LINTLIBFLAG = -C
- X LINTOPTS = -axz
- X LN = ln -s
- X MV = mv
- X RANLIB = ranlib
- X RANLIBINSTFLAGS =
- X RM = rm -f
- X STD_CPP_DEFINES = */
- X STD_DEFINES =
- XSYSLAST_LIBRARIES =
- X TAGS = ctags
- X
- X###########################################################################
- X# site-specific configuration parameters - edit site.def to change
- X
- X# site: $XConsortium: site.def,v 1.16 88/10/12 10:30:24 jim Exp $
- X
- X###########################################################################
- X# definitions common to all Makefiles - do not edit
- X
- X SHELL = /bin/sh
- X
- X DESTDIR =
- X USRLIBDIR = $(DESTDIR)/usr/lib
- X BINDIR = $(DESTDIR)/usr/bin/X11
- X INCDIR = $(DESTDIR)/usr/include/X11
- X ADMDIR = $(DESTDIR)/usr/adm
- X LIBDIR = $(USRLIBDIR)/X11
- X LINTLIBDIR = $(USRLIBDIR)/lint
- X FONTDIR = $(LIBDIR)/fonts
- X XINITDIR = $(LIBDIR)/xinit
- X XDMDIR = $(LIBDIR)/xdm
- X UWMDIR = $(LIBDIR)/uwm
- X AWMDIR = $(LIBDIR)/awm
- X TWMDIR = $(LIBDIR)/twm
- X MANPATH = $(DESTDIR)/usr/man
- X MANSOURCEPATH = $(MANPATH)/man
- X MANDIR = $(MANSOURCEPATH)n
- X LIBMANDIR = $(MANSOURCEPATH)3
- X XAPPLOADDIR = $(LIBDIR)/app-defaults
- X
- X INSTBINFLAGS = -m 0755
- X INSTUIDFLAGS = -m 4755
- X INSTLIBFLAGS = -m 0664
- X INSTINCFLAGS = -m 0444
- X INSTMANFLAGS = -m 0444
- X INSTAPPFLAGS = -m 0444
- X INSTKMEMFLAGS = -m 4755
- X FCFLAGS = -t
- X CDEBUGFLAGS = -O
- X
- X PATHSEP = /
- X DEPEND = $(DEPENDSRC)/makedepend
- X IMAKE = $(IMAKESRC)/imake
- X RGB = $(RGBSRC)/rgb
- X FC = $(BDFTOSNFSRC)/bdftosnf
- X MKFONTDIR = $(MKFONTDIRSRC)/mkfontdir
- X MKDIRHIER = $(SCRIPTSSRC)/mkdirhier.sh
- X
- X CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES) $(DEFINES)
- X LINTFLAGS = $(LINTOPTS) $(INCLUDES) $(STD_DEFINES) $(DEFINES) -DLINT
- X LDFLAGS = $(CDEBUGFLAGS) $(SYS_LIBRARIES) $(SYSAUX_LIBRARIES)
- X TOP = /people/riley/R3
- X CLIENTSRC = $(TOP)/clients
- X DEMOSRC = $(TOP)/demos
- X LIBSRC = $(TOP)/lib
- X FONTSRC = $(TOP)/fonts
- X INCLUDESRC = $(TOP)/X11
- X SERVERSRC = $(TOP)/server
- X UTILSRC = $(TOP)/util
- X SCRIPTSSRC = $(UTILSRC)/scripts
- X EXAMPLESRC = $(TOP)/examples
- X CONTRIBSRC = $(TOP)/contrib
- X DOCSRC = $(TOP)/doc
- X RGBSRC = $(TOP)/rgb
- X DEPENDSRC = $(UTILSRC)/makedepend
- X IMAKESRC = $(UTILSRC)/imake
- X IRULESRC = $(UTILSRC)/imake.includes
- X XLIBSRC = $(LIBSRC)/X
- X XMUSRC = $(LIBSRC)/Xmu
- X TOOLKITSRC = $(LIBSRC)/Xt
- X AWIDGETSRC = $(LIBSRC)/Xaw
- X OLDXLIBSRC = $(LIBSRC)/oldX
- X BDFTOSNFSRC = $(FONTSRC)/bdftosnf
- X MKFONTDIRSRC = $(FONTSRC)/mkfontdir
- X EXTENSIONSRC = $(TOP)/extensions
- X EXTENSIONLIB = $(EXTENSIONSRC)/lib/libXext.a
- X XLIB = $(XLIBSRC)/libX11.a
- X XMULIB = $(XMUSRC)/libXmu.a
- X OLDXLIB = $(OLDXLIBSRC)/liboldX.a
- X XTOOLLIB = $(TOOLKITSRC)/libXt.a
- X XAWLIB = $(AWIDGETSRC)/libXaw.a
- X LINTXLIB = $(XLIBSRC)/llib-lX11.ln
- X LINTXMU = $(XMUSRC)/llib-lXmu.ln
- X LINTXTOOL = $(TOOLKITSRC)/llib-lXt.ln
- X LINTXAW = $(AWIDGETSRC)/llib-lXaw.ln
- X INCLUDES = -I$(TOP)
- X MACROFILE = Guess.macros
- X ICONFIGFILES = $(IRULESRC)/Imake.tmpl \
- X $(IRULESRC)/$(MACROFILE) $(IRULESRC)/site.def
- X IMAKE_DEFINES =
- X IMAKE_CMD = $(NEWTOP)$(IMAKE) -TImake.tmpl -I$(NEWTOP)$(IRULESRC) \
- X -s Makefile $(IMAKE_DEFINES)
- X RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a \
- X .emacs_* tags TAGS make.log MakeOut
- X
- X###########################################################################
- X# rules: $XConsortium: Imake.rules,v 1.71 88/10/23 22:46:34 jim Exp $
- X
- X###########################################################################
- X# start of Imakefile
- X
- XCDEBUGFLAGS = -systype bsd43 -O
- X
- XSRCS= animate.c app.c
- XOBJS= animate.o app.o
- XSYS_LIBRARIES= -L../lib -lV -lm -lX11
- X
- X PROGRAM = animate
- X
- Xall:: animate
- X
- Xanimate: $(OBJS) $(LOCAL_LIBRARIES)
- X $(RM) $@
- X $(CC) -o $@ $(OBJS) $(LOCAL_LIBRARIES) $(LDFLAGS) $(SYSLAST_LIBRARIES)
- X
- Xrelink::
- X $(RM) $(PROGRAM)
- X $(MAKE) $(MFLAGS) $(PROGRAM)
- X
- Xinstall:: animate
- X $(INSTALL) -c $(INSTALLFLAGS) animate $(BINDIR)
- X
- Xinstall.man:: animate.man
- X $(INSTALL) -c $(INSTMANFLAGS) animate.man $(MANDIR)/animate.n
- X
- Xdepend:: $(DEPEND)
- X
- Xdepend::
- X $(DEPEND) -s "# DO NOT DELETE" -- $(CFLAGS) -- $(SRCS)
- X
- X$(DEPEND):
- X @echo "making $@"; \
- X cd $(DEPENDSRC); $(MAKE)
- X
- Xclean::
- X $(RM) $(PROGRAM)
- X
- X###########################################################################
- X# Imake.tmpl common rules for all Makefiles - do not edit
- X
- Xemptyrule::
- X
- Xclean::
- X $(RM_CMD) \#*
- X
- XMakefile:: $(IMAKE)
- X
- XMakefile:: Imakefile \
- X $(IRULESRC)/Imake.tmpl \
- X $(IRULESRC)/Imake.rules \
- X $(IRULESRC)/site.def \
- X $(IRULESRC)/$(MACROFILE)
- X -@if [ -f Makefile ]; then \
- X echo "$(RM) Makefile.bak; $(MV) Makefile Makefile.bak"; \
- X $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
- X else exit 0; fi
- X $(IMAKE_CMD) -DTOPDIR=$(TOP)
- X
- X$(IMAKE):
- X @echo "making $@"; \
- X cd $(IMAKESRC); $(MAKE) BOOTSTRAPCFLAGS=$(BOOTSTRAPCFLAGS)
- X
- Xtags::
- X $(TAGS) -w *.[ch]
- X $(TAGS) -xw *.[ch] > TAGS
- X
- X###########################################################################
- X# empty rules for directories that do not have SUBDIRS - do not edit
- X
- Xinstall::
- X @echo "install done"
- X
- Xinstall.man::
- X @echo "install.man done"
- X
- XMakefiles::
- X
- X###########################################################################
- X# dependencies generated by makedepend
- X
- END_OF_FILE
- if test 7148 -ne `wc -c <'acm/V/test/Makefile'`; then
- echo shar: \"'acm/V/test/Makefile'\" unpacked with wrong size!
- fi
- # end of 'acm/V/test/Makefile'
- fi
- if test -f 'acm/V/test/animate.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'acm/V/test/animate.c'\"
- else
- echo shar: Extracting \"'acm/V/test/animate.c'\" \(7198 characters\)
- sed "s/^X//" >'acm/V/test/animate.c' <<'END_OF_FILE'
- X#include <stdio.h>
- X#include <X11/Xlib.h>
- X#include <X11/Xutil.h>
- X
- Xstatic char *id = "V library animation test -- Riley Rainey";
- X
- X#define STRING "Double Buffered Animation"
- X#define BORDER 1
- X#define FONT "fixed"
- X#define ARG_FONT "font"
- X#define ARG_BORDER_COLOR "borderColor"
- X#define ARG_BACKGROUND "background"
- X#define ARG_BORDER "borderWidth"
- X#define ARG_GEOMETRY "geometry"
- X#define DEFAULT_BACKGROUND "#29350B"
- X#define DEFAULT_BORDER "black"
- X
- X#define SW_BORDER 1
- X#define SW_BG 3
- X#define SW_GEOM 4
- X
- Xstruct {
- X char *sw;
- X int value;
- X } switches[] = {
- X "-bw", SW_BORDER,
- X "-bg", SW_BG,
- X "-geometry", SW_GEOM,
- X NULL, 0}, *swp;
- X
- Xchar *background = NULL, *filename;
- Xint borderWidth = 1;
- Xint mono;
- X
- X
- X/*
- X * This structure forms the WM_HINTS property of the window,
- X * letting the window manager know how to handle this window.
- X * See Section 9.1 of the Xlib manual.
- X */
- XXWMHints xwmh = {
- X (InputHint|StateHint), /* flags */
- X False, /* input */
- X NormalState, /* initial_state */
- X 0, /* icon pixmap */
- X 0, /* icon window */
- X 0, 0, /* icon location */
- X 0, /* icon mask */
- X 0, /* Window group */
- X};
- X
- XDisplay *dpy; /* X server connection */
- XWindow win; /* Window ID */
- XGC gc; /* GC to draw with */
- XXGCValues gcv;
- XXSizeHints xsh; /* Size hints for window manager */
- XColormap cmap;
- X
- Xstatic unsigned long planemask [6]; /* plane masks from XAllocColorCells */
- Xstatic unsigned long pixels [16]; /* pixel values from XAllocColorCells */
- XGC curGC;
- X
- Xmain(argc,argv)
- X int argc;
- X char **argv;
- X{
- X char *fontName; /* Name of font for string */
- X XFontStruct *fontstruct; /* Font descriptor */
- X unsigned long ftw, fth, pad;/* Font size parameters */
- X unsigned long bg, bd; /* Pixel values */
- X unsigned long bw; /* Border width */
- X char *tempstr; /* Temporary string */
- X XColor color; /* Temporary color */
- X char *geomSpec = NULL;/* Window geometry string */
- X XSetWindowAttributes xswa; /* Temporary Set Window Attribute struct */
- X char **c;
- X
- X/*
- X * Parse command line
- X */
- X
- X for (c= &argv[1]; *c != (char *) NULL; ++c)
- X if (**c == '-') {
- X for (swp= &switches[0]; swp->value != 0; ++swp)
- X if (strcmp (swp->sw, *c) == 0) {
- X switch (swp->value) {
- X case SW_GEOM:
- X geomSpec = *(++c);
- X break;
- X case SW_BG:
- X background = *(++c);
- X break;
- X case SW_BORDER:
- X borderWidth = atoi (*(++c));
- X break;
- X }
- X break;
- X }
- X if (swp->value == 0) {
- X fprintf (stderr, "%s: invalid switch %s", argv[0], *c);
- X exit (1);
- X }
- X }
- X else
- X filename = *c;
- X
- X /*
- X * Open the display using the $DISPLAY environment variable to locate
- X * the X server. See Section 2.1.
- X */
- X if ((dpy = XOpenDisplay(NULL)) == NULL) {
- X fprintf(stderr, "%s: can't open %s\n", argv[0], XDisplayName(NULL));
- X exit(1);
- X }
- X
- X mono = (DisplayPlanes(dpy, 0) < 2) ? 1 : 0;
- X
- X /*
- X * Load the font to use. See Sections 10.2 & 6.5.1
- X */
- X if ((fontName = XGetDefault(dpy, argv[0], ARG_FONT)) == NULL) {
- X fontName = FONT;
- X }
- X if ((fontstruct = XLoadQueryFont(dpy, fontName)) == NULL) {
- X fprintf(stderr, "%s: display %s doesn't know font %s\n",
- X argv[0], DisplayString(dpy), fontName);
- X exit(1);
- X }
- X fth = fontstruct->max_bounds.ascent + fontstruct->max_bounds.descent;
- X ftw = fontstruct->max_bounds.width;
- X
- X /*
- X * Select colors for the border, the window background, and the
- X * foreground. We use the default colormap to allocate the colors in.
- X * See Sections 2.2.1, 5.1.2, & 10.4.
- X */
- X
- X cmap = DefaultColormap(dpy, DefaultScreen(dpy));
- X
- X if ((tempstr = XGetDefault(dpy, argv[0], ARG_BORDER_COLOR)) == NULL)
- X tempstr = DEFAULT_BORDER;
- X if (XParseColor(dpy, cmap, tempstr, &color) == 0) {
- X fprintf (stderr, "Can't get border color %s\n", tempstr);
- X exit (1);
- X }
- X bd = color.pixel;
- X
- X/*
- X * Allocate Color Planes and one extra cell for the border color.
- X */
- X
- X if (mono == 0)
- X if (XAllocColorCells (dpy, cmap, False, planemask, 0, pixels, 1) == 0) {
- X fprintf (stderr, "Cannot allocate color cells\n");
- X exit (1);
- X }
- X bg = WhitePixel (dpy, 0);
- X
- X/*
- X * Store border color
- X */
- X
- X if (mono)
- X bd = BlackPixel (dpy, 0);
- X else {
- X bd = color.pixel = pixels [0];
- X XStoreColor (dpy, cmap, &color);
- X }
- X
- X/*
- X * Background Color (pixels [0] defines this).
- X */
- X
- X if (background == NULL)
- X background = XGetDefault (dpy, argv[0], ARG_BACKGROUND);
- X if (background == NULL)
- X background = DEFAULT_BACKGROUND;
- X
- X /*
- X * Set the border width of the window, and the gap between the text
- X * and the edge of the window, "pad".
- X */
- X pad = BORDER;
- X if ((tempstr = XGetDefault(dpy, argv[0], ARG_BORDER)) == NULL)
- X bw = 1;
- X else
- X bw = atoi(tempstr);
- X
- X /*
- X * Deal with providing the window with an initial position & size.
- X * Fill out the XSizeHints struct to inform the window manager. See
- X * Sections 9.1.6 & 10.3.
- X */
- X if (geomSpec == NULL)
- X geomSpec = XGetDefault(dpy, argv[0], ARG_GEOMETRY);
- X
- X if (geomSpec == NULL) {
- X /*
- X * The defaults database doesn't contain a specification of the
- X * initial size & position - fit the window to the text and locate
- X * it in the center of the screen.
- X */
- X xsh.flags = (PPosition | PSize);
- X xsh.height = 800;
- X xsh.width = 1000;
- X xsh.x = (DisplayWidth(dpy, DefaultScreen(dpy)) - xsh.width) / 2;
- X xsh.y = (DisplayHeight(dpy, DefaultScreen(dpy)) - xsh.height) / 2;
- X }
- X else {
- X int bitmask;
- X
- X bzero(&xsh, sizeof(xsh));
- X bitmask = XGeometry(dpy, DefaultScreen(dpy), geomSpec, geomSpec,
- X bw, ftw, fth, pad, pad, &(xsh.x), &(xsh.y),
- X &(xsh.width), &(xsh.height));
- X if (bitmask & (XValue | YValue)) {
- X xsh.flags |= USPosition;
- X }
- X if (bitmask & (WidthValue | HeightValue)) {
- X xsh.flags |= USSize;
- X }
- X }
- X
- X /*
- X * Create the Window with the information in the XSizeHints, the
- X * border width, and the border & background pixels. See Section 3.3.
- X */
- X win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy),
- X xsh.x, xsh.y, xsh.width, xsh.height,
- X bw, bd, bg);
- X
- X /*
- X * Set the standard properties for the window managers. See Section
- X * 9.1.
- X */
- X XSetStandardProperties(dpy, win, STRING, STRING, None, argv, argc, &xsh);
- X XSetWMHints(dpy, win, &xwmh);
- X
- X /*
- X * Ensure that the window's colormap field points to the default
- X * colormap, so that the window manager knows the correct colormap to
- X * use for the window. See Section 3.2.9. Also, set the window's Bit
- X * Gravity to reduce Expose events.
- X */
- X xswa.colormap = DefaultColormap(dpy, DefaultScreen(dpy));
- X xswa.bit_gravity = NorthWestGravity;
- X XChangeWindowAttributes(dpy, win, (CWColormap | CWBitGravity), &xswa);
- X
- X /*
- X * Create the GC for drawing the picture.
- X */
- X gcv.font = fontstruct->fid;
- X curGC = XCreateGC(dpy, win, GCFont, &gcv);
- X
- X /*
- X * Specify the event types we're interested in - only Exposures. See
- X * Sections 8.5 & 8.4.5.1
- X */
- X XSelectInput(dpy, win, ExposureMask);
- X
- X /*
- X * Map the window to make it visible. See Section 3.5.
- X */
- X XMapWindow(dpy, win);
- X
- X app(background);
- X
- X exit(1);
- X}
- X
- END_OF_FILE
- if test 7198 -ne `wc -c <'acm/V/test/animate.c'`; then
- echo shar: \"'acm/V/test/animate.c'\" unpacked with wrong size!
- fi
- # end of 'acm/V/test/animate.c'
- fi
- if test -f 'acm/fsim/doRadar.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'acm/fsim/doRadar.c'\"
- else
- echo shar: Extracting \"'acm/fsim/doRadar.c'\" \(9804 characters\)
- sed "s/^X//" >'acm/fsim/doRadar.c' <<'END_OF_FILE'
- X/*
- X * xflight : an aerial combat simulator for X
- X *
- X * Written by Riley Rainey, riley@mips.com
- X *
- X * Permission to use, copy, modify and distribute (without charge) this
- X * software, documentation, images, etc. is granted, provided that this
- X * comment and the author's name is retained.
- X *
- X */
- X
- X#include "pm.h"
- X#include <stdio.h>
- X#include <math.h>
- X
- X#define scanSlope 2.1445
- X
- Xvoid plotPrimaryTarget(), plotNormalTarget();
- X
- Xstatic char *thirty = "30";
- X
- X/*
- X * We'll build an array that contains the amount of radar radiation that each
- X * craft can "see" coming from another player. This is used to build each players
- X * radar threat display.
- X *
- X * rval[i][j] will represent the amount of radar energy that player j sees coming from
- X * player i.
- X *
- X * For neatness, the rval array has been moved to the ptbl vector.
- X */
- X
- Xchar *ItoA (n, s)
- Xint n;
- Xchar *s; {
- X
- X if (abs(n) > 999) {
- X sprintf (s, "%d,%3.3d", n/1000, abs(n) % 1000);
- X }
- X else
- X sprintf (s, "%d", n);
- X
- X return s;
- X}
- X
- Xint doRadar (c, u)
- Xcraft *c;
- Xviewer *u; {
- X
- X register craft *p;
- X register int i, t, x, y;
- X register int xc, yc;
- X register double xs, ys;
- X char *buf;
- X
- X t = c->curRadarTarget = getRadarTarget (c, 0);
- X xc = (u->radarWidth + 1) / 2;
- X yc = (u->radarHeight + 1) / 2;
- X
- X/*
- X * Set drawing colors and font
- X */
- X
- X XSetForeground (u->dpy, u->gc, u->v->flags & VPMono ?
- X BlackPixel(u->v->dpy, u->v->screen) :
- X u->v->pixel[blackPixel]);
- X XFillRectangle (u->dpy, u->rwin, u->gc, 0, 0,
- X u->radarWidth, u->radarHeight);
- X XSetForeground (u->dpy, u->gc, u->v->flags & VPMono ?
- X WhitePixel(u->v->dpy, u->v->screen) :
- X u->v->pixel[whitePixel]);
- X XSetFont (u->dpy, u->gc, u->rfont->fid);
- X
- X/*
- X * Draw reference "thing"
- X */
- X
- X XDrawLine (u->dpy, u->rwin, u->gc, xc, yc, xc - 5, yc + 5);
- X XDrawLine (u->dpy, u->rwin, u->gc, xc - 10, yc, xc - 5, yc + 5);
- X XDrawLine (u->dpy, u->rwin, u->gc, xc - 10, yc, xc - 18, yc);
- X XDrawLine (u->dpy, u->rwin, u->gc, xc, yc, xc + 5, yc + 5);
- X XDrawLine (u->dpy, u->rwin, u->gc, xc + 10, yc, xc + 5, yc + 5);
- X XDrawLine (u->dpy, u->rwin, u->gc, xc + 10, yc, xc + 18, yc);
- X XDrawLine (u->dpy, u->rwin, u->gc, 0, 0, u->radarWidth-1, 0);
- X XDrawLine (u->dpy, u->rwin, u->gc, u->radarWidth-1, 0,
- X u->radarWidth-1, u->radarHeight-1);
- X XDrawLine (u->dpy, u->rwin, u->gc, 0, u->radarHeight-1,
- X u->radarWidth-1, u->radarHeight-1);
- X XDrawLine (u->dpy, u->rwin, u->gc, 0, u->radarHeight, 0, 0);
- X
- X/*
- X * Radar dead?
- X */
- X
- X if (isFunctioning (c, SYS_RADAR) == 0)
- X return 0;
- X
- X/*
- X * Radar off?
- X */
- X
- X if (c->radarMode <= RM_STANDBY) {
- X if (c->radarMode == RM_OFF)
- X buf = "RADAR OFF";
- X else
- X buf = "RADAR STBY";
- X c->curRadarTarget = -1;
- X XDrawString (u->dpy, u->rwin, u->gc, u->rftw * 4,
- X u->fth * 2, buf, strlen(buf));
- X return 0;
- X }
- X
- X/*
- X * Plot reference lines
- X */
- X
- X i = (u->radarWidth + 3) / 4;
- X y = u->rfth + 3;
- X XDrawLine (u->dpy, u->rwin, u->gc, xc, y, xc, y+4);
- X y = u->radarHeight - 5 - u->rfth;
- X XDrawLine (u->dpy, u->rwin, u->gc, xc, y, xc, y+4);
- X
- X x = xc - i;
- X y = u->rfth + 6;
- X XDrawLine (u->dpy, u->rwin, u->gc, x, y, x, y+4);
- X y = u->radarHeight - 6 - u->rfth;
- X XDrawLine (u->dpy, u->rwin, u->gc, x, y, x, y+4);
- X XDrawString (u->dpy, u->rwin, u->gc, x-u->rftw, y+2+u->rfth,
- X thirty, 2);
- X
- X x = xc + i;
- X y = u->rfth + 6;
- X XDrawLine (u->dpy, u->rwin, u->gc, x, y, x, y+4);
- X y = u->radarHeight - 6 - u->rfth;
- X XDrawLine (u->dpy, u->rwin, u->gc, x, y, x, y+4);
- X XDrawString (u->dpy, u->rwin, u->gc, x-u->rftw, y+2+u->rfth,
- X thirty, 2);
- X
- X i = (u->radarHeight + 3) / 4;
- X x = 2;
- X XDrawLine (u->dpy, u->rwin, u->gc, x, yc, x+4, yc);
- X x = u->radarWidth - 6;
- X XDrawLine (u->dpy, u->rwin, u->gc, x, yc, x+4, yc);
- X
- X x = 5 + 2 * u->rftw;
- X y = yc - i;
- X XDrawLine (u->dpy, u->rwin, u->gc, x, y, x+4, y);
- X x = 3;
- X XDrawString (u->dpy, u->rwin, u->gc, x, y+u->rfth/3,
- X thirty, 2);
- X x = u->radarWidth - 6;
- X XDrawLine (u->dpy, u->rwin, u->gc, x, y, x+4, y);
- X
- X x = 5 + 2 * u->rftw;
- X y = yc + i;
- X XDrawLine (u->dpy, u->rwin, u->gc, x, y, x+4, y);
- X x = 3;
- X XDrawString (u->dpy, u->rwin, u->gc, x, y+u->rfth/3,
- X thirty, 2);
- X x = u->radarWidth - 6;
- X XDrawLine (u->dpy, u->rwin, u->gc, x, y, x+4, y);
- X
- X/*
- X * Now plot all targets visible to the radar system.
- X */
- X
- X for ((i=0, p=ptbl); i<MAXPLAYERS; (++i, ++p)) {
- X if (c->relValid[i] > 0 && c->relPos[i].x >= 0.0) {
- X
- X xs = c->relPos[i].y / c->relPos[i].x / scanSlope;
- X ys = c->relPos[i].z / c->relPos[i].x / scanSlope;
- X if (fabs(xs) <= 1.0 && fabs(ys) <= 1.0) {
- X x = xs * (double) xc + xc;
- X y = ys * (double) yc + yc;
- X if (t == i)
- X plotPrimaryTarget (c, u, i, x, y);
- X else
- X plotNormalTarget (u, x, y);
- X }
- X }
- X }
- X return 0;
- X}
- X
- Xint isRadarVisible (c, i)
- Xcraft *c;
- Xint i; {
- X
- X register double d, xs, ys;
- X VPoint r1;
- X
- X if (ptbl[i].type == CT_FREE || i == c->index)
- X return 0;
- X
- X/*
- X * Is the set on ?
- X */
- X
- X if (c->radarMode <= RM_STANDBY ||
- X isFunctioning (c, SYS_RADAR) == 0) {
- X ptbl[i].rval[c->index] = 0.0;
- X return 0;
- X }
- X
- X/*
- X * Calculate the coordinates of the target relative to the craft's frame.
- X */
- X
- X r1.x = ptbl[i].Sg.x - c->Sg.x;
- X r1.y = ptbl[i].Sg.y - c->Sg.y;
- X r1.z = ptbl[i].Sg.z - c->Sg.z;
- X VTransform (&r1, &(c->Itrihedral), &(c->relPos[i]));
- X
- X ptbl[i].rval[c->index] = 0.0;
- X
- X if (c->relPos[i].x <= 0.0)
- X return 0;
- X
- X d = c->relPos[i].x * scanSlope;
- X xs = c->relPos[i].y / d;
- X ys = c->relPos[i].z / d;
- X
- X/*
- X * if the absolute values of xs and ys are both less than 1.0, then
- X * we are painting this target with radar energy. Estimate the value of
- X * the energy that the target sees.
- X */
- X
- X if ((fabs(xs) <= 1.0) && (fabs(ys) <= 1.0)) {
- X d = mag(c->relPos[i]);
- X ptbl[i].rval[c->index] = c->cinfo->radarOutput / (d * d);
- X if (d >= c->cinfo->radarDRange)
- X return 0;
- X else if (d >= c->cinfo->radarTRange)
- X return 1;
- X else
- X return 2;
- X }
- X else
- X return 0;
- X
- X}
- X
- Xint getRadarTarget (c, new)
- Xcraft *c;
- Xint new; {
- X
- X register int i, minID;
- X register double minD, d;
- X
- X for (i=0; i<MAXPLAYERS; ++i)
- X c->relValid[i] = isRadarVisible(c, i);
- X
- X if (new == 0) {
- X i = c->curRadarTarget;
- X if (i != -1 && c->relValid[i] != 0)
- X return i;
- X }
- X
- X minD = 1000.0 * NM;
- X minID = -1;
- X for (i=0; i<MAXPLAYERS; ++i) {
- X if (c->relValid[i] == 2) {
- X if (new == 1 && i == c->curRadarTarget)
- X continue;
- X d = mag (c->relPos[i]);
- X if (d < minD) {
- X minD = d;
- X minID = i;
- X }
- X }
- X }
- X
- X return minID;
- X}
- X
- Xvoid doDroneRadar (c)
- Xcraft *c; {
- X
- X register int i;
- X
- X for (i=0; i<MAXPLAYERS; ++i)
- X (void) isRadarVisible(c, i);
- X}
- X
- Xvoid plotNormalTarget (u, x, y)
- Xviewer *u;
- Xint x, y; {
- X
- X XDrawLine (u->dpy, u->rwin, u->gc, x-2, y-2, x-2, y+2);
- X XDrawLine (u->dpy, u->rwin, u->gc, x-2, y+2, x+2, y+2);
- X XDrawLine (u->dpy, u->rwin, u->gc, x+2, y+2, x+2, y-2);
- X XDrawLine (u->dpy, u->rwin, u->gc, x+2, y-2, x-2, y-2);
- X}
- X
- Xextern double heading();
- X
- Xvoid plotPrimaryTarget (c, u, i, x, y)
- Xcraft *c;
- Xviewer *u;
- Xint i;
- Xint x, y; {
- X
- X int xp, yp;
- X char s[16];
- X VPoint rel, deltaV;
- X double d, cl;
- X
- X xp = 150 * u->radarWidth / RADAR_WINDOW_WIDTH;
- X yp = 150 * u->radarHeight / RADAR_WINDOW_HEIGHT;
- X
- X XFillRectangle (u->dpy, u->rwin, u->gc, x-3, y-3, 7, 7);
- X
- X/*
- X * Heading of target
- X */
- X
- X sprintf (s, " %3.3d \007", (int) (RADtoDEG(ptbl[i].curHeading)));
- X XDrawString (u->dpy, u->rwin, u->gc, xp, yp, s, strlen(s));
- X
- X/*
- X * Relative heading to target.
- X */
- X
- X rel.x = ptbl[i].Sg.x - c->Sg.x;
- X rel.y = ptbl[i].Sg.y - c->Sg.y;
- X rel.z = ptbl[i].Sg.z - c->Sg.z;
- X sprintf (s, " %3.3d R", (int) RADtoDEG(heading(&rel)));
- X XDrawString (u->dpy, u->rwin, u->gc, xp, yp+u->rfth, s, strlen(s));
- X
- X/*
- X * Closure rate
- X */
- X
- X deltaV.x = ptbl[i].Cg.x - c->Cg.x;
- X deltaV.y = ptbl[i].Cg.y - c->Cg.y;
- X deltaV.z = ptbl[i].Cg.z - c->Cg.z;
- X d = mag (rel);
- X cl = - (deltaV.x * rel.x + deltaV.y * rel.y + deltaV.z + rel.z) /
- X d / NM * 3600.0;
- X c->targetDistance = d;
- X c->targetClosure = cl;
- X sprintf (s, "%5d C", (int)cl);
- X XDrawString (u->dpy, u->rwin, u->gc, xp, yp+2*u->rfth, s, strlen(s));
- X
- X/*
- X * Range to target
- X */
- X
- X xp = 40 * u->radarWidth / RADAR_WINDOW_WIDTH;
- X yp = u->rfth + 4;
- X sprintf (s, "%d", (int) (d / NM));
- X XDrawString (u->dpy, u->rwin, u->gc, xp, yp, s, strlen(s));
- X
- X/*
- X * Altitude of target
- X */
- X
- X xp = 150 * u->radarWidth / RADAR_WINDOW_WIDTH;
- X yp = u->rfth + 4;
- X sprintf (s, "%d", (int) (- ptbl[i].Sg.z / 1000.0));
- X XDrawString (u->dpy, u->rwin, u->gc, xp, yp, s, strlen(s));
- X}
- X
- X/*
- X * doTEWS : update the threat display for player i.
- X */
- X
- Xvoid doTEWS (c, u)
- Xcraft *c;
- Xviewer *u; {
- X
- X register int i, x, y;
- X VPoint rel, tmp;
- X double m, unit;
- X
- X XSetForeground (u->dpy, u->gc, u->v->flags & VPMono ?
- X BlackPixel(u->v->dpy, u->v->screen) :
- X u->v->pixel[blackPixel]);
- X XFillRectangle (u->dpy, u->win, u->gc, u->TEWSx-u->TEWSSize/2,
- X u->TEWSy-u->TEWSSize/2, u->TEWSSize, u->TEWSSize);
- X XSetForeground (u->dpy, u->gc, u->v->flags & VPMono ?
- X WhitePixel(u->v->dpy, u->v->screen) :
- X u->v->pixel[whitePixel]);
- X
- X XDrawArc(u->dpy, u->win, u->gc, u->TEWSx-u->TEWSSize/2,
- X u->TEWSy-u->TEWSSize/2, u->TEWSSize, u->TEWSSize,
- X 0, 360*64);
- X
- X for (i=0; i<MAXPLAYERS; ++i) {
- X
- X if (c->index == i)
- X continue;
- X
- X if (c->rval[i] > c->cinfo->TEWSThreshold) {
- X tmp.x = ptbl[i].Sg.x - c->Sg.x;
- X tmp.y = ptbl[i].Sg.y - c->Sg.y;
- X tmp.z = ptbl[i].Sg.z - c->Sg.z;
- X VTransform (&tmp, &(c->Itrihedral), &(rel));
- X m = mag(rel);
- X rel.x /= m;
- X rel.y /= m;
- X rel.z /= m;
- X unit = sqrt (rel.x * rel.x + rel.y * rel.y);
- X if (unit == 0.0) {
- X rel.x = 1.0;
- X rel.y = 0.0;
- X }
- X x = u->TEWSx + (int) (rel.y * u->TEWSSize * 0.4 / unit);
- X y = u->TEWSy - (int) (rel.x * u->TEWSSize * 0.4 / unit);
- X if (c->team == ptbl[i].team) {
- X XDrawLine (u->dpy, u->win, u->gc, x-2, y-2, x-2, y+2);
- X XDrawLine (u->dpy, u->win, u->gc, x-2, y+2, x+2, y+2);
- X XDrawLine (u->dpy, u->win, u->gc, x+2, y+2, x+2, y-2);
- X XDrawLine (u->dpy, u->win, u->gc, x+2, y-2, x-2, y-2);
- X }
- X else
- X XFillRectangle (u->dpy, u->win, u->gc, x-3, y-3, 7, 7);
- X }
- X }
- X}
- END_OF_FILE
- if test 9804 -ne `wc -c <'acm/fsim/doRadar.c'`; then
- echo shar: \"'acm/fsim/doRadar.c'\" unpacked with wrong size!
- fi
- # end of 'acm/fsim/doRadar.c'
- fi
- if test -f 'acm/fsim/newPlane.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'acm/fsim/newPlane.c'\"
- else
- echo shar: Extracting \"'acm/fsim/newPlane.c'\" \(9352 characters\)
- sed "s/^X//" >'acm/fsim/newPlane.c' <<'END_OF_FILE'
- X/*
- X * xflight : an aerial combat simulator for X
- X *
- X * Written by Riley Rainey, riley@mips.com
- X *
- X * Permission to use, copy, modify and distribute (without charge) this
- X * software, documentation, images, etc. is granted, provided that this
- X * comment and the author's name is retained.
- X *
- X */
- X
- X#include "pm.h"
- X#include <stdio.h>
- X#include <string.h>
- X
- Xstatic craftType ctype[MAXCRAFTTYPES];
- X
- Xextern FILE * acm_fopen ();
- X
- XcraftType *lookupCraft (name)
- Xchar * name;
- X{
- X int i;
- X
- X for (i=0; i<MAXCRAFTTYPES; ++i)
- X if (ctype[i].name != (char *) NULL)
- X if (strcmp(name, ctype[i].name) == 0)
- X return &ctype[i];
- X
- X return (craftType *) NULL;
- X}
- X
- XcraftType *newCraft () {
- X
- X int i;
- X
- X for (i=0; i<MAXCRAFTTYPES; ++i)
- X if (ctype[i].name == (char *) NULL) {
- X ctype[i].name = "*allocated*";
- X return &ctype[i];
- X }
- X
- X return (craftType *) NULL;
- X}
- X
- Xstatic struct {
- X double mach;
- X double Cdi;
- X } *p, cdTable[] = {
- X { 0.0, 0.02 },
- X { 0.2, 0.02 },
- X { 0.95, 0.015},
- X { 1.05, 0.045},
- X { 2.0, 0.03 },
- X { 10.0, 0.03 }
- X };
- X
- Xstatic double CDi (c)
- Xcraft *c; {
- X
- X register double b, deltaMach;
- X
- X for (p=cdTable; c->mach>(p+1)->mach; ++p) ;
- X deltaMach = (p+1)->mach - p->mach;
- X b = ((p+1)->Cdi - p->Cdi) / deltaMach;
- X return p->Cdi + b * (c->mach - p->mach);
- X}
- X
- Xvoid initf16 () {
- X
- X FILE *f;
- X craftType *c;
- X
- X c = newCraft();
- X c->name = strdup("f-16c");
- X c->CLOrigin = 0.129871;
- X
- X c->CLSlope = 4.0;
- X
- X c->CLNegStall = DEGtoRAD (-17.0);
- X c->CLPosStall = DEGtoRAD (30.0);
- X
- X c->aspectRatio = 3.0;
- X
- X c->CDOrigin = 0.03642;
- X c->CDi = CDi;
- X c->CDFactor = -2.54200;
- X c->CDPhase = 0.0349066;
- X
- X c->CDBOrigin = 1.0;
- X c->CDBFactor = -1.0;
- X c->CDBPhase = 0.0;
- X
- X c->CLbeta = -0.2;
- X
- X c->CMOrigin = 0.0;
- X c->CMFactor = -0.95;
- X
- X c->CNOrigin = 0.0;
- X c->CNFactor = -7.50; /* based on 60 ft^2 tail; CLa = 1.0; Ivx = 15 ft */
- X
- X c->CYbeta = -1.5;
- X
- X c->effElevator = 0.40;
- X c->effAileron = 0.20;
- X c->effRudder = 0.35;
- X
- X c->maxFlap = DEGtoRAD (40.0); /* 40 degree maximum flap setting */
- X c->cFlap = 0.64279; /* yields Clift of 1.0 at max extension */
- X c->cFlapDrag = 0.0467; /* yields 0.03 of extra drag at max ext */
- X c->flapRate = 0.1745; /* about 4 seconds to fully extend flaps */
- X
- X c->maxSpeedBrake = DEGtoRAD (80.0);
- X c->cSpeedBrake = 0.03; /* drag coefficient added by speed brakes */
- X c->speedBrakeRate = DEGtoRAD (40.0); /* about 2.0 seconds to fully extend */
- X c->speedBrakeIncr = DEGtoRAD (80.0); /* one keystoke means full extension */
- X
- X VIdentMatrix(&(c->I));
- X
- X c->I.m[0][0] = 7240.7;
- X c->I.m[1][1] = 49785.9;
- X c->I.m[2][2] = 54389.5;
- X
- X c->LDamp = 40000.0;
- X c->MDamp = -0.6;
- X c->NDamp = -0.6;
- X
- X c->cmSlope = -2.00;
- X c->cmFactor = -1.30;
- X c->cnSlope = -1.30;
- X c->cnFactor = -1.00;
- X c->betaStall = DEGtoRAD (15.0);
- X
- X c->wingS = 300.0;
- X c->emptyWeight = 14576.0;
- X c->maxFuel = 6972.0;
- X
- X/*
- X * Engine data for F100-PW-100
- X * source "Modern Combat Aircraft Design", Klaus Huenecke
- X */
- X
- X c->maxThrust = 14080.0;
- X c->maxABThrust = 23540.0;
- X c->spFuelConsump = 0.68;
- X c->spABFuelConsump = 2.55;
- X
- X c->groundingPoint.x = 0.0;
- X c->groundingPoint.y = 0.0;
- X c->groundingPoint.z = 6.0;
- X c->viewPoint.x = 12.5;
- X c->viewPoint.y = 0.0;
- X c->viewPoint.z = -3.0;
- X c->crashC = 90.0;
- X
- X c->sCount = 3;
- X c->wStation[0].x = 7.0;
- X c->wStation[0].y = -4.0;
- X c->wStation[0].z = 0.0;
- X c->wStation[1].x = 0.357;
- X c->wStation[1].y = 15.6;
- X c->wStation[1].z = 0.0;
- X c->wStation[2].x = 0.357;
- X c->wStation[2].y = -15.6;
- X c->wStation[2].z = 0.0;
- X
- X c->muStatic = 0.08;
- X c->muKinetic = 0.05;
- X c->muBStatic = 0.7;
- X c->muBKinetic = 0.6;
- X
- X c->maxNWDef = 1.27; /* 72.7 degrees */
- X c->NWIncr = 1.27 / 32.0;
- X c->maxNWS = 85.0 * 6076.0 / 3600.0;
- X c->gearD1 = 13.5;
- X c->gearD2 = -2.5;
- X f = acm_fopen ("f16", "r");
- X c->object = VReadObject(f);
- X fclose (f);
- X
- X c->TEWSThreshold = 0.0; /* zero, for now */
- X c->radarOutput = 15000.0; /* estimated */
- X c->radarDRange = 80.0 * NM;
- X c->radarTRange = 60.0 * NM;
- X
- X c->placeProc = NULL;
- X
- X c->damageBits = SYS_NODAMAGE;
- X c->damageBits &= ~ SYS_ENGINE2;
- X c->structurePts = 15;
- X
- X}
- X
- Xvoid initmig23 () {
- X
- X FILE *f;
- X craftType *c;
- X
- X c = newCraft();
- X c->name = strdup("mig-23");
- X c->CLOrigin = 0.129871;
- X c->CLSlope = 3.9;
- X c->CLNegStall = -17.0 * pi / 180.0;
- X c->CLPosStall = 26.0 * pi / 180.0;
- X
- X c->aspectRatio = 2.27;
- X
- X c->CDOrigin = 0.03642;
- X c->CDi = CDi;
- X c->CDFactor = -2.54200;
- X c->CDPhase = 0.0349066;
- X
- X c->CDBOrigin = 1.0;
- X c->CDBFactor = -1.0;
- X c->CDBPhase = 0.0;
- X
- X c->CLbeta = -0.2;
- X
- X c->CMOrigin = 0.0;
- X c->CMFactor = -0.95;
- X
- X c->CNOrigin = 0.0;
- X c->CNFactor = -0.90;
- X
- X c->CYbeta = -1.3;
- X
- X c->effElevator = 0.40;
- X c->effAileron = 0.20;
- X c->effRudder = 0.35;
- X
- X c->maxFlap = 40.0 * pi / 180.0; /* 40 degree maximum flap setting */
- X c->cFlap = 0.64279; /* yields Clift of 1.0 at max extension */
- X c->flapRate = 0.1745; /* about 4 seconds to fully extend flaps */
- X
- X c->maxSpeedBrake = DEGtoRAD (80.0);
- X c->cSpeedBrake = 0.03; /* drag coefficient added by speed brakes */
- X c->speedBrakeRate = DEGtoRAD (40.0); /* about 0.25 seconds to fully extend */
- X c->speedBrakeIncr = DEGtoRAD (80.0); /* one keystoke means full extension */
- X
- X VIdentMatrix(&(c->I));
- X c->I.m[0][0] = 9000.0;
- X c->I.m[1][1] = 75000.0;
- X c->I.m[2][2] = 95000.0;
- X
- X c->LDamp = 50000.0;
- X c->MDamp = -0.2;
- X c->NDamp = -0.4;
- X
- X c->cmSlope = -1.80;
- X c->cmFactor = -1.30;
- X c->cnSlope = -1.30;
- X c->cnFactor = -1.00;
- X c->betaStall = DEGtoRAD (15.0);
- X
- X c->wingS = 325.0;
- X c->emptyWeight = 25000.0;
- X c->maxFuel = 9914.0;
- X/*
- X * Engine data for Tumansky R-29B
- X * source "Modern Fighter Combat"
- X */
- X
- X c->maxThrust = 17635.0;
- X c->maxABThrust = 25350.0;
- X c->spFuelConsump = 0.68;
- X c->spABFuelConsump = 2.55;
- X
- X c->groundingPoint.x = 0.0;
- X c->groundingPoint.y = 0.0;
- X c->groundingPoint.z = 6.0;
- X c->viewPoint.x = 12.5;
- X c->viewPoint.y = 0.0;
- X c->viewPoint.z = -3.0;
- X c->crashC = 90.0;
- X
- X c->sCount = 3;
- X c->wStation[0].x = 7.0;
- X c->wStation[0].y = -4.0;
- X c->wStation[0].z = 0.0;
- X c->wStation[1].x = 0.357;
- X c->wStation[1].y = 15.6;
- X c->wStation[1].z = 0.0;
- X c->wStation[2].x = 0.357;
- X c->wStation[2].y = -15.6;
- X c->wStation[2].z = 0.0;
- X
- X c->muStatic = 0.08;
- X c->muKinetic = 0.05;
- X c->muBStatic = 0.7;
- X c->muBKinetic = 0.6;
- X
- X c->maxNWDef = 1.27; /* 72.7 degrees */
- X c->NWIncr = 1.27 / 32.0;
- X c->maxNWS = 100.0 * 6076.0 / 3600.0;
- X c->gearD1 = 13.5;
- X c->gearD2 = -2.5;
- X f = acm_fopen ("mig23", "r");
- X c->object = VReadObject(f);
- X fclose (f);
- X
- X c->TEWSThreshold = 0.0; /* zero, for now */
- X c->radarOutput = 15000.0; /* estimated */
- X c->radarDRange = 80.0 * NM;
- X c->radarTRange = 30.0 * NM;
- X
- X c->placeProc = NULL;
- X
- X c->damageBits = SYS_NODAMAGE;
- X c->damageBits &= ~ SYS_ENGINE2;
- X c->structurePts = 19;
- X
- X}
- X
- Xextern void initPanel();
- X
- Xint newPlane(planeType)
- Xchar *planeType; {
- X
- X int i, j;
- X craft *c;
- X
- X for (i=0; i<MAXPLAYERS; ++i) {
- X if (ptbl[i].type == CT_FREE) {
- X
- X c = &ptbl[i];
- X c->type = CT_PLANE;
- X c->cinfo = lookupCraft (planeType);
- X c->fuel = c->cinfo->maxFuel;
- X
- X c->Cg.x = 0.0;
- X c->Cg.y = 0.0;
- X c->Cg.z = 0.0;
- X c->Sg.x = 90.0;
- X c->Sg.y = 0.0;
- X c->Sg.z = - c->cinfo->groundingPoint.z;
- X c->prevSg = c->Sg;
- X
- X c->p = c->q = c->r = 0.0;
- X c->Se = c->Sr = c->Sa = 0.0;
- X
- X c->throttle = 8192;
- X c->curThrust = calcThrust (c);
- X c->curFlap = 0.0;
- X c->flapSetting = 0.0;
- X c->curSpeedBrake = 0.0;
- X c->speedBrakeSetting = 0.0;
- X c->curHeading = c->curPitch = c->curRoll = 0.0;
- X VIdentMatrix(&(c->trihedral));
- X c->Itrihedral = c->trihedral;
- X c->groundContact = 1;
- X c->curNWDef = 0.0;
- X c->flags = FL_NWS;
- X c->radarMode = RM_NORMAL;
- X c->curRadarTarget = -1;
- X c->viewDirection.x = 1.0;
- X c->viewDirection.y = 0.0;
- X c->viewDirection.z = 0.0;
- X c->viewUp.x = 0.0;
- X c->viewUp.y = 0.0;
- X c->viewUp.z = -1.0;
- X for (j=0; j<3; ++j) {
- X c->leftHUD[j] = Vmalloc (32);
- X c->rightHUD[j] = Vmalloc (32);
- X }
- X
- X c->curWeapon = WEAPONTYPES - 1;
- X selectWeapon (c);
- X
- X/* a trick to select a valid weapon */
- X
- X/*
- X * give the player 8 Sidewinders and a cannon.
- X */
- X
- X c->station[0].type = WK_M61A1;
- X c->station[0].info = 500;
- X c->station[0].info2 = 0;
- X c->station[0].info3 = 0;
- X c->station[1].type = WK_AIM9M;
- X c->station[2].type = WK_AIM9M;
- X c->station[3].type = WK_AIM9M;
- X c->station[4].type = WK_AIM9M;
- X c->station[5].type = WK_AIM9M;
- X c->station[6].type = WK_AIM9M;
- X c->station[7].type = WK_AIM9M;
- X c->station[8].type = WK_AIM9M;
- X initDamage (c);
- X initPanel (c);
- X break;
- X }
- X }
- X
- X if (i == MAXPLAYERS)
- X return -1;
- X
- X return i;
- X}
- X
- Xint newDrone(p)
- Xcraft *p; {
- X
- X
- X int i, j;
- X craft *c;
- X VPoint s;
- X
- X for (i=0; i<MAXPLAYERS; ++i) {
- X if (ptbl[i].type == CT_FREE) {
- X
- X c = &ptbl[i];
- X *c = *p;
- X
- X c->index = i;
- X c->team = i;
- X
- X c->vl = NULL;
- X c->type = CT_DRONE;
- X c->cinfo = lookupCraft ("f-16c");
- X
- X/*
- X * Position the drone 200 feet ahead of the player's craft.
- X */
- X
- X s.x = 5400.0;
- X s.y = 2030.0;
- X s.z = 0.0;
- X VTransform (&s, &(p->trihedral), &(c->Sg));
- X c->Sg.x += p->Sg.x;
- X c->Sg.y += p->Sg.y;
- X c->Sg.z += p->Sg.z;
- X c->prevSg = c->Sg;
- X
- X/* c->p = c->q = c->r = 0.0;
- X c->Se = c->Sr = c->Sa = 0.0;
- X
- X c->throttle = 8192;
- X c->curThrust = calcThrust (c);
- X c->curHeading = c->curPitch = c->curRoll = 0.0;
- X VIdentMatrix(&(c->trihedral));
- X c->Itrihedral = c->trihedral;
- X*/
- X c->groundContact = 0;
- X c->curNWDef = 0.0;
- X c->flags = 0;
- X c->radarMode = RM_NORMAL;
- X
- X for (j=0; j<3; ++j)
- X c->leftHUD[j] = c->rightHUD[j] = NULL;
- X
- X break;
- X }
- X }
- X
- X if (i == MAXPLAYERS)
- X return -1;
- X
- X return i;
- X}
- END_OF_FILE
- if test 9352 -ne `wc -c <'acm/fsim/newPlane.c'`; then
- echo shar: \"'acm/fsim/newPlane.c'\" unpacked with wrong size!
- fi
- # end of 'acm/fsim/newPlane.c'
- fi
- if test -f 'acm/fsim/rwy' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'acm/fsim/rwy'\"
- else
- echo shar: Extracting \"'acm/fsim/rwy'\" \(8674 characters\)
- sed "s/^X//" >'acm/fsim/rwy' <<'END_OF_FILE'
- X*runway-with-lines
- X216 54
- X1 0.000000 -75.000000 0.000000
- X2 12000.000000 -75.000000 0.000000
- X3 12000.000000 75.000000 0.000000
- X4 0.000000 75.000000 0.000000
- X5 0.000000 -75.000000 0.000000
- X6 12000.000000 -75.000000 0.000000
- X7 12000.000000 -72.000000 0.000000
- X8 0.000000 -72.000000 0.000000
- X9 0.000000 75.000000 0.000000
- X10 12000.000000 75.000000 0.000000
- X11 12000.000000 72.000000 0.000000
- X12 0.000000 72.000000 0.000000
- X13 1000.000000 -68.000000 0.000000
- X14 1125.000000 -68.000000 0.000000
- X15 1125.000000 -45.500000 0.000000
- X16 1000.000000 -45.500000 0.000000
- X17 1000.000000 68.000000 0.000000
- X18 1125.000000 68.000000 0.000000
- X19 1125.000000 45.500000 0.000000
- X20 1000.000000 45.500000 0.000000
- X21 11000.000000 -68.000000 0.000000
- X22 10875.000000 -68.000000 0.000000
- X23 10875.000000 -45.500000 0.000000
- X24 11000.000000 -45.500000 0.000000
- X25 11000.000000 68.000000 0.000000
- X26 10875.000000 68.000000 0.000000
- X27 10875.000000 45.500000 0.000000
- X28 11000.000000 45.500000 0.000000
- X29 4.000000 -68.000000 0.000000
- X30 129.000000 -68.000000 0.000000
- X31 129.000000 -56.444443 0.000000
- X32 4.000000 -56.444443 0.000000
- X33 4.000000 -52.444443 0.000000
- X34 129.000000 -52.444443 0.000000
- X35 129.000000 -40.888889 0.000000
- X36 4.000000 -40.888889 0.000000
- X37 4.000000 -36.888889 0.000000
- X38 129.000000 -36.888889 0.000000
- X39 129.000000 -25.333334 0.000000
- X40 4.000000 -25.333334 0.000000
- X41 4.000000 -21.333334 0.000000
- X42 129.000000 -21.333334 0.000000
- X43 129.000000 -9.777778 0.000000
- X44 4.000000 -9.777778 0.000000
- X45 4.000000 9.777778 0.000000
- X46 129.000000 9.777778 0.000000
- X47 129.000000 21.333334 0.000000
- X48 4.000000 21.333334 0.000000
- X49 4.000000 25.333334 0.000000
- X50 129.000000 25.333334 0.000000
- X51 129.000000 36.888889 0.000000
- X52 4.000000 36.888889 0.000000
- X53 4.000000 40.888889 0.000000
- X54 129.000000 40.888889 0.000000
- X55 129.000000 52.444443 0.000000
- X56 4.000000 52.444443 0.000000
- X57 4.000000 56.444443 0.000000
- X58 129.000000 56.444443 0.000000
- X59 129.000000 68.000000 0.000000
- X60 4.000000 68.000000 0.000000
- X61 11996.000000 -68.000000 0.000000
- X62 11871.000000 -68.000000 0.000000
- X63 11871.000000 -56.444443 0.000000
- X64 11996.000000 -56.444443 0.000000
- X65 11996.000000 -52.444443 0.000000
- X66 11871.000000 -52.444443 0.000000
- X67 11871.000000 -40.888889 0.000000
- X68 11996.000000 -40.888889 0.000000
- X69 11996.000000 -36.888889 0.000000
- X70 11871.000000 -36.888889 0.000000
- X71 11871.000000 -25.333334 0.000000
- X72 11996.000000 -25.333334 0.000000
- X73 11996.000000 -21.333334 0.000000
- X74 11871.000000 -21.333334 0.000000
- X75 11871.000000 -9.777778 0.000000
- X76 11996.000000 -9.777778 0.000000
- X77 11996.000000 9.777778 0.000000
- X78 11871.000000 9.777778 0.000000
- X79 11871.000000 21.333334 0.000000
- X80 11996.000000 21.333334 0.000000
- X81 11996.000000 25.333334 0.000000
- X82 11871.000000 25.333334 0.000000
- X83 11871.000000 36.888889 0.000000
- X84 11996.000000 36.888889 0.000000
- X85 11996.000000 40.888889 0.000000
- X86 11871.000000 40.888889 0.000000
- X87 11871.000000 52.444443 0.000000
- X88 11996.000000 52.444443 0.000000
- X89 11996.000000 56.444443 0.000000
- X90 11871.000000 56.444443 0.000000
- X91 11871.000000 68.000000 0.000000
- X92 11996.000000 68.000000 0.000000
- X93 258.000000 -2.000000 0.000000
- X94 383.000000 -2.000000 0.000000
- X95 383.000000 2.000000 0.000000
- X96 258.000000 2.000000 0.000000
- X97 633.000000 -2.000000 0.000000
- X98 758.000000 -2.000000 0.000000
- X99 758.000000 2.000000 0.000000
- X100 633.000000 2.000000 0.000000
- X101 1008.000000 -2.000000 0.000000
- X102 1133.000000 -2.000000 0.000000
- X103 1133.000000 2.000000 0.000000
- X104 1008.000000 2.000000 0.000000
- X105 1383.000000 -2.000000 0.000000
- X106 1508.000000 -2.000000 0.000000
- X107 1508.000000 2.000000 0.000000
- X108 1383.000000 2.000000 0.000000
- X109 1758.000000 -2.000000 0.000000
- X110 1883.000000 -2.000000 0.000000
- X111 1883.000000 2.000000 0.000000
- X112 1758.000000 2.000000 0.000000
- X113 2133.000000 -2.000000 0.000000
- X114 2258.000000 -2.000000 0.000000
- X115 2258.000000 2.000000 0.000000
- X116 2133.000000 2.000000 0.000000
- X117 2508.000000 -2.000000 0.000000
- X118 2633.000000 -2.000000 0.000000
- X119 2633.000000 2.000000 0.000000
- X120 2508.000000 2.000000 0.000000
- X121 2883.000000 -2.000000 0.000000
- X122 3008.000000 -2.000000 0.000000
- X123 3008.000000 2.000000 0.000000
- X124 2883.000000 2.000000 0.000000
- X125 3258.000000 -2.000000 0.000000
- X126 3383.000000 -2.000000 0.000000
- X127 3383.000000 2.000000 0.000000
- X128 3258.000000 2.000000 0.000000
- X129 3633.000000 -2.000000 0.000000
- X130 3758.000000 -2.000000 0.000000
- X131 3758.000000 2.000000 0.000000
- X132 3633.000000 2.000000 0.000000
- X133 4008.000000 -2.000000 0.000000
- X134 4133.000000 -2.000000 0.000000
- X135 4133.000000 2.000000 0.000000
- X136 4008.000000 2.000000 0.000000
- X137 4383.000000 -2.000000 0.000000
- X138 4508.000000 -2.000000 0.000000
- X139 4508.000000 2.000000 0.000000
- X140 4383.000000 2.000000 0.000000
- X141 4758.000000 -2.000000 0.000000
- X142 4883.000000 -2.000000 0.000000
- X143 4883.000000 2.000000 0.000000
- X144 4758.000000 2.000000 0.000000
- X145 5133.000000 -2.000000 0.000000
- X146 5258.000000 -2.000000 0.000000
- X147 5258.000000 2.000000 0.000000
- X148 5133.000000 2.000000 0.000000
- X149 5508.000000 -2.000000 0.000000
- X150 5633.000000 -2.000000 0.000000
- X151 5633.000000 2.000000 0.000000
- X152 5508.000000 2.000000 0.000000
- X153 5883.000000 -2.000000 0.000000
- X154 6008.000000 -2.000000 0.000000
- X155 6008.000000 2.000000 0.000000
- X156 5883.000000 2.000000 0.000000
- X157 6258.000000 -2.000000 0.000000
- X158 6383.000000 -2.000000 0.000000
- X159 6383.000000 2.000000 0.000000
- X160 6258.000000 2.000000 0.000000
- X161 6633.000000 -2.000000 0.000000
- X162 6758.000000 -2.000000 0.000000
- X163 6758.000000 2.000000 0.000000
- X164 6633.000000 2.000000 0.000000
- X165 7008.000000 -2.000000 0.000000
- X166 7133.000000 -2.000000 0.000000
- X167 7133.000000 2.000000 0.000000
- X168 7008.000000 2.000000 0.000000
- X169 7383.000000 -2.000000 0.000000
- X170 7508.000000 -2.000000 0.000000
- X171 7508.000000 2.000000 0.000000
- X172 7383.000000 2.000000 0.000000
- X173 7758.000000 -2.000000 0.000000
- X174 7883.000000 -2.000000 0.000000
- X175 7883.000000 2.000000 0.000000
- X176 7758.000000 2.000000 0.000000
- X177 8133.000000 -2.000000 0.000000
- X178 8258.000000 -2.000000 0.000000
- X179 8258.000000 2.000000 0.000000
- X180 8133.000000 2.000000 0.000000
- X181 8508.000000 -2.000000 0.000000
- X182 8633.000000 -2.000000 0.000000
- X183 8633.000000 2.000000 0.000000
- X184 8508.000000 2.000000 0.000000
- X185 8883.000000 -2.000000 0.000000
- X186 9008.000000 -2.000000 0.000000
- X187 9008.000000 2.000000 0.000000
- X188 8883.000000 2.000000 0.000000
- X189 9258.000000 -2.000000 0.000000
- X190 9383.000000 -2.000000 0.000000
- X191 9383.000000 2.000000 0.000000
- X192 9258.000000 2.000000 0.000000
- X193 9633.000000 -2.000000 0.000000
- X194 9758.000000 -2.000000 0.000000
- X195 9758.000000 2.000000 0.000000
- X196 9633.000000 2.000000 0.000000
- X197 10008.000000 -2.000000 0.000000
- X198 10133.000000 -2.000000 0.000000
- X199 10133.000000 2.000000 0.000000
- X200 10008.000000 2.000000 0.000000
- X201 10383.000000 -2.000000 0.000000
- X202 10508.000000 -2.000000 0.000000
- X203 10508.000000 2.000000 0.000000
- X204 10383.000000 2.000000 0.000000
- X205 10758.000000 -2.000000 0.000000
- X206 10883.000000 -2.000000 0.000000
- X207 10883.000000 2.000000 0.000000
- X208 10758.000000 2.000000 0.000000
- X209 11133.000000 -2.000000 0.000000
- X210 11258.000000 -2.000000 0.000000
- X211 11258.000000 2.000000 0.000000
- X212 11133.000000 2.000000 0.000000
- X213 11508.000000 -2.000000 0.000000
- X214 11633.000000 -2.000000 0.000000
- X215 11633.000000 2.000000 0.000000
- X216 11508.000000 2.000000 0.000000
- X#b7b19f 4 1 2 3 4
- Xwhite 4 5 6 7 8
- Xwhite 4 9 10 11 12
- Xwhite 4 13 14 15 16
- Xwhite 4 17 18 19 20
- Xwhite 4 21 22 23 24
- Xwhite 4 25 26 27 28
- Xwhite 4 29 30 31 32
- Xwhite 4 33 34 35 36
- Xwhite 4 37 38 39 40
- Xwhite 4 41 42 43 44
- Xwhite 4 45 46 47 48
- Xwhite 4 49 50 51 52
- Xwhite 4 53 54 55 56
- Xwhite 4 57 58 59 60
- Xwhite 4 61 62 63 64
- Xwhite 4 65 66 67 68
- Xwhite 4 69 70 71 72
- Xwhite 4 73 74 75 76
- Xwhite 4 77 78 79 80
- Xwhite 4 81 82 83 84
- Xwhite 4 85 86 87 88
- Xwhite 4 89 90 91 92
- Xwhite 4 93 94 95 96
- Xwhite 4 97 98 99 100
- Xwhite 4 101 102 103 104
- Xwhite 4 105 106 107 108
- Xwhite 4 109 110 111 112
- Xwhite 4 113 114 115 116
- Xwhite 4 117 118 119 120
- Xwhite 4 121 122 123 124
- Xwhite 4 125 126 127 128
- Xwhite 4 129 130 131 132
- Xwhite 4 133 134 135 136
- Xwhite 4 137 138 139 140
- Xwhite 4 141 142 143 144
- Xwhite 4 145 146 147 148
- Xwhite 4 149 150 151 152
- Xwhite 4 153 154 155 156
- Xwhite 4 157 158 159 160
- Xwhite 4 161 162 163 164
- Xwhite 4 165 166 167 168
- Xwhite 4 169 170 171 172
- Xwhite 4 173 174 175 176
- Xwhite 4 177 178 179 180
- Xwhite 4 181 182 183 184
- Xwhite 4 185 186 187 188
- Xwhite 4 189 190 191 192
- Xwhite 4 193 194 195 196
- Xwhite 4 197 198 199 200
- Xwhite 4 201 202 203 204
- Xwhite 4 205 206 207 208
- Xwhite 4 209 210 211 212
- Xwhite 4 213 214 215 216
- END_OF_FILE
- if test 8674 -ne `wc -c <'acm/fsim/rwy'`; then
- echo shar: \"'acm/fsim/rwy'\" unpacked with wrong size!
- fi
- # end of 'acm/fsim/rwy'
- fi
- echo shar: End of archive 4 \(of 9\).
- cp /dev/null ark4isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 9 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
- Riley Rainey Internet: riley@mips.com
- MIPS Computer Systems Phone: +1 214 770-7979
- Dallas, Texas
-